//! # RustCloud 熔断器库
//!
//! 提供了完整的熔断器模式实现，用于在微服务架构中实现故障隔离和服务保护。
//! 当下游服务出现高失败率或响应超时时，熔断器会自动“断开”连接，
//! 避免级联故障并给系统恢复的机会。
//!
//! ## 核心原理
//!
//! 熔断器有三种状态：
//!
//! * **关闭状态 (Closed)** - 正常状态，所有请求都会被转发到下游服务
//! * **打开状态 (Open)** - 故障状态，所有请求都会被快速失败，不转发到下游
//! * **半开状态 (Half-Open)** - 恢复状态，允许少量请求测试下游服务是否恢复
//!
//! ## 状态转换
//!
//! ```text
//!     失败率超过阈值
//! 关闭 ─────────────────> 打开
//!   ↑                       │
//!   │                       │ 超时后
//!   │ 成功次数超过阈值         │
//!   │                       ↓
//! 半开 <───────────────── 半开
//!       失败率仍然超过阈值
//! ```
//!
//! ## 功能特性
//!
//! * **自动故障检测** - 基于失败率、响应时间等指标自动检测故障
//! * **快速失败** - 在打开状态下快速返回失败，避免资源浪费
//! * **自动恢复** - 定时尝试恢复对下游服务的调用
//! * **降级支持** - 支持在熔断器打开时执行降级逻辑
//! * **指标监控** - 实时监控熔断器状态和统计数据
//! * **可配置参数** - 支持灵活配置各种阈值和时间参数
//!
//! ## 使用场景
//!
//! * **微服务调用保护** - 保护上游服务不受下游服务故障影响
//! * **级联故障防止** - 防止单点故障扩散到整个系统
//! * **系统过载保护** - 在系统负载过高时限制请求流量
//! * **依赖服务隔离** - 隔离不同依赖服务的故障影响
//!
//! ## 使用示例
//!
//! ```rust
//! use rustcloud_circuit_breaker::*;
//! use std::time::Duration;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // 创建熔断器配置
//!     let config = CircuitBreakerConfig {
//!         enabled: true,
//!         failure_rate_threshold: 0.5,           // 50%失败率阈值
//!         response_time_threshold: Duration::from_millis(1000),  // 1秒响应时间阈值
//!         min_request_threshold: 10,             // 最少请求数
//!         failure_threshold: 5,                  // 失败次数阈值
//!         recovery_timeout: Duration::from_secs(30), // 30秒恢复时间
//!         half_open_success_threshold: 2,        // 半开成功阈值
//!         fallback_enabled: true,                // 启用降级
//!     };
//!     
//!     // 创建熔断器
//!     let cb = SimpleCircuitBreaker::new(config);
//!     
//!     // 使用熔断器调用服务
//!     let result = cb.call("user-service", Box::new(|| {
//!         Box::pin(async { 
//!             // 这里调用真实的服务
//!             Ok(Response::new(200))
//!         })
//!     })).await;
//!     
//!     // 检查熔断器状态
//!     let state = cb.state("user-service").await;
//!     let metrics = cb.metrics("user-service").await;
//!     
//!     Ok(())
//! }
//! ```

pub mod circuit_breaker;
pub mod state_machine;
pub mod monitor;

// 重新导出公共功能模块以保持向后兼容
pub mod error_handling {
    //! 错误处理模块，重新导出 rustcloud-resilience 功能
    pub use rustcloud_resilience::error_handling::*;
}

pub mod observability {
    //! 可观测性模块，重新导出 rustcloud-observability 功能
    pub use rustcloud_observability::*;
}

#[cfg(feature = "admin")]
pub mod admin {
    //! 管理接口模块，重新导出 rustcloud-admin 功能
    pub use rustcloud_admin::*;
}

#[cfg(test)]
mod tests;

// 主要导出
pub use circuit_breaker::*;
pub use state_machine::*;
pub use monitor::*;

// 预设模块 - 常用功能集合
pub mod prelude {
    pub use crate::circuit_breaker::*;
    pub use crate::state_machine::*;
    pub use crate::monitor::*;
    pub use crate::error_handling::*;
    pub use crate::observability::*;
    
    #[cfg(feature = "admin")]
    pub use crate::admin::*;
    
    // 重新导出公共模块的预设
    pub use rustcloud_resilience::prelude::*;
    pub use rustcloud_observability::prelude::*;
    
    #[cfg(feature = "admin")]
    pub use rustcloud_admin::prelude::*;
}